package com.example.util;//package com.example.util;
//
//import com.jd.platform.hotkey.client.callback.JdHotKeyStore;
//import org.springframework.data.redis.core.RedisTemplate;
//import org.springframework.stereotype.Component;
//
//import javax.annotation.Resource;
//
///**
// * @author wuweifeng wrote on 2020-02-21
// * @version 1.0
// */
//@Component
//public class Cache {
//    @Resource
//    private RedisTemplate<String, String> redisTemplate;
//
//    //只是普通的获取值
//    public String getFromRedis(String key) {
//        return redisTemplate.opsForValue().get(key); //获取普通key
//    }
//
//    //走JdHotKeyStore计数的获取值
//    // JdHotKeyStore是Caffeine为缓存。存到JVM 的内存中了，如果有需要则弄多一个redis的bean代替其进行读写
//    // JdHotKeyStore的isHotKey和getValue方法是执行完对应逻辑才计数   ；  get不计数
//    // JdHotKeyStore的计数是  不是hotkey才计数 以及 hotkey还有1秒过期才计数  注意：是hotkey时不到最后1秒不计数
//    public String get(String key) {
//        Object object = JdHotKeyStore.getValue(key); //是hotkey才获取到值；不管是不是hotkey都进行计数
//        if (object != null) { //如果已经缓存过了，证明是hotkey
//            System.out.println("此时是hotkey");
//            return object.toString();
//        }
//        System.out.println("此时不是hotkey");
//        String value = redisTemplate.opsForValue().get(key); //获取普通key
//        if(value==null) { //该key不存在即没有存值时，被恶意访问了多次，为避免缓存穿透，设置值为""
//            value="";
//        }
//        JdHotKeyStore.smartSet(key, value); //是热值才赋值为hotkey
//        return value;
//    }
//
//    //这里可能是添加，也可能是更新
//    public void set(String key, String value) {
//        redisTemplate.opsForValue().set(key, value); //添加只执行了这个，因为一开始不是hotkey；更新也执行这个
//        JdHotKeyStore.smartSet(key, value); //更新时如果是hotkey，则JdHotKeyStore也要跟着改
//    }
//
//    //如果可预见的知道某hotkey将很少被访问，则只执行这个
//    public void beCold(String key) {
//        JdHotKeyStore.remove(key);
//    }
//
////    //如果可预见的知道某hotkey将很多被访问，则执行这个（没必要，JdHotKeyStore的存在就是为了应对突发的高访问）
////    public void beHot(String key, String value) {
////        JdHotKeyStore.forceSet(key,value);
////    }
//
//    //删除redis的数据，此时为避免幻读，需要将JdHotKeyStore中对应的hotkey一起删了
//    public void remove(String key) {
//        redisTemplate.delete(key);
//        JdHotKeyStore.remove(key);
//    }
//}
